﻿Imports Microsoft.VisualBasic

Public Class EstudianteCRN

    Public Sub InsetarEstudiante(ByVal objEstudiante As Estudiante)

        If objEstudiante Is Nothing Then
            Throw New Exception("El objeto no puede ser nulo")
        End If

        If String.IsNullOrEmpty(objEstudiante.Nombre) Then
            Throw New Exception("El nombre del estudiante no puede ser nulo ni vacio")
        End If

        If String.IsNullOrEmpty(objEstudiante.ApellidoPaterno) Then
            Throw New Exception("El Apellido Paterno del estudiante no puede ser nulo ni vacio")
        End If

        If String.IsNullOrEmpty(objEstudiante.ApellidoMaterno) Then
            Throw New Exception("El Apellido Materno del estudiante no puede ser nulo ni vacio")
        End If

        If String.IsNullOrEmpty(objEstudiante.CI) Then
            Throw New Exception("El CI del estudiante no puede ser nulo ni vacio")
        End If


        If String.IsNullOrEmpty(objEstudiante.Direccion) Then
            Throw New Exception("La Direccion del estudiante no puede ser nulo ni vacio")
        End If

        If String.IsNullOrEmpty(objEstudiante.Telefono) Then
            Throw New Exception("El Descripcion del estudiante no puede ser nulo ni vacio")
        End If

        If String.IsNullOrEmpty(objEstudiante.Email) Then
            Throw New Exception("El Descripcion del estudiante no puede ser nulo ni vacio")
        End If

        If String.IsNullOrEmpty(objEstudiante.FechaNacimiento) Then
            Throw New Exception("La Fecha de Nacimiento del estudiante no puede ser nulo ni vacio")
        End If

        If String.IsNullOrEmpty(objEstudiante.LugarNacimiento) Then
            Throw New Exception("El Lugar de Nacimiento del estudiante no puede ser nulo ni vacio")
        End If

        If String.IsNullOrEmpty(objEstudiante.Celular) Then
            Throw New Exception("El Descripcion del estudiante no puede ser nulo ni vacio")
        End If

        Dim adapter As EstudianteDSTableAdapters.EstudianteTableAdapter = New EstudianteDSTableAdapters.EstudianteTableAdapter()

        Dim estudianteId? As Integer = 0

        adapter.Insert(estudianteId, objEstudiante.Nombre, "Estudiante", objEstudiante.ApellidoPaterno, objEstudiante.ApellidoMaterno, objEstudiante.CI, objEstudiante.Direccion, objEstudiante.Telefono, objEstudiante.Email, objEstudiante.FechaNacimiento, objEstudiante.LugarNacimiento, objEstudiante.Celular, objEstudiante.ColegioAnterior, "")

        If estudianteId Is Nothing Or estudianteId.Value <= 0 Then
            Throw New Exception("El query se ejecuto correctamente pero no se genero la llave primaria")
        End If

        objEstudiante.PersonaId = estudianteId.Value

    End Sub

    Public Sub ActualizarEstudiante(ByVal objEstudiante As Estudiante)

        If objEstudiante Is Nothing Then
            Throw New Exception("El objeto no puede ser nulo")
        End If

        If objEstudiante.PersonaId <= 0 Then
            Throw New Exception("El id del estudiante no puede ser nulo")
        End If

        If String.IsNullOrEmpty(objEstudiante.Nombre) Then
            Throw New Exception("El nombre del estudiante no puede ser nulo ni vacio")
        End If

        If String.IsNullOrEmpty(objEstudiante.ApellidoPaterno) Then
            Throw New Exception("El Estado del estudiante no puede ser nulo ni vacio")
        End If

        If String.IsNullOrEmpty(objEstudiante.ApellidoMaterno) Then
            Throw New Exception("El Estado del estudiante no puede ser nulo ni vacio")
        End If

        If String.IsNullOrEmpty(objEstudiante.CI) Then
            Throw New Exception("El CI del estudiante no puede ser nulo ni vacio")
        End If

        If String.IsNullOrEmpty(objEstudiante.Direccion) Then
            Throw New Exception("El Direccion del estudiante no puede ser nulo ni vacio")
        End If

        If String.IsNullOrEmpty(objEstudiante.Telefono) Then
            Throw New Exception("El Telefono del estudiante no puede ser nulo ni vacio")
        End If

        If String.IsNullOrEmpty(objEstudiante.Email) Then
            Throw New Exception("El Email del estudiante no puede ser nulo ni vacio")
        End If

        If String.IsNullOrEmpty(objEstudiante.FechaNacimiento) Then
            Throw New Exception("La FechaNacimiento del estudiante no puede ser nulo ni vacio")
        End If

        If String.IsNullOrEmpty(objEstudiante.LugarNacimiento) Then
            Throw New Exception("La Fecha de Nacimiento del estudiante no puede ser nulo ni vacio")
        End If

        If String.IsNullOrEmpty(objEstudiante.Celular) Then
            Throw New Exception("El Lugar de Nacimiento del estudiante no puede ser nulo ni vacio")
        End If

        Dim adapter As EstudianteDSTableAdapters.EstudianteTableAdapter = New EstudianteDSTableAdapters.EstudianteTableAdapter()

        adapter.Update(objEstudiante.PersonaId, objEstudiante.Nombre, "Estudiante", objEstudiante.ApellidoPaterno, objEstudiante.ApellidoMaterno, objEstudiante.CI, objEstudiante.Direccion, objEstudiante.Telefono, objEstudiante.Email, objEstudiante.FechaNacimiento, objEstudiante.LugarNacimiento, objEstudiante.Celular, objEstudiante.ColegioAnterior, "")


    End Sub

    Public Sub EliminarEstudiante(ByVal codEst As Integer)

        If codEst <= 0 Then
            Throw New Exception("El id del estudiante no puede ser menor o igual que cero")
        End If

        Dim adapter As EstudianteDSTableAdapters.EstudianteTableAdapter = New EstudianteDSTableAdapters.EstudianteTableAdapter()

        adapter.Delete(codEst)

    End Sub

    Public Function GetEstudianteById(ByVal id As Integer) As Estudiante
        If (id <= 0) Then
            Throw New Exception("El Id del estudiante no puede ser menor o igual que cero.")
        End If

        Dim adapter As EstudianteDSTableAdapters.EstudianteTableAdapter = New EstudianteDSTableAdapters.EstudianteTableAdapter()

        Dim tabla As EstudianteDS.EstudianteDataTable = adapter.GetEstudianteById(id)

        If tabla Is Nothing Or tabla.Rows.Count = 0 Then
            Throw New Exception("El SQL se ejecuto correctamente pero devolvio un conjunto de datos nulo.")
        End If

        Dim estudiante As Estudiante = Me.ConstruirEstudiante(tabla(0))

        Return estudiante
    End Function

    Public Function GetEstudianteBySearch(ByVal searchTerm As String) As List(Of Estudiante)
        If searchTerm Is Nothing Then
            searchTerm = ""
        End If

        Dim adapter As EstudianteDSTableAdapters.EstudianteTableAdapter = New EstudianteDSTableAdapters.EstudianteTableAdapter()

        Dim tabla As EstudianteDS.EstudianteDataTable = adapter.GetEstudianteBySearch(searchTerm)

        If tabla Is Nothing Then
            Throw New Exception("El SQL se ejecuto correctamente pero devolvio un conjunto de datos nulo.")
        End If

        Dim lista As List(Of Estudiante) = New List(Of Estudiante)()

        For Each row As EstudianteDS.EstudianteRow In tabla
            Dim estudiante As Estudiante = Me.ConstruirEstudiante(row)
            lista.Add(estudiante)
        Next

        Return lista
    End Function

    Private Function ConstruirEstudiante(ByVal row As EstudianteDS.EstudianteRow) As Estudiante
        Return New Estudiante(row.personaId, _
                              row.nombre, _
                              row.apellidoPaterno, _
                              row.apellidoMaterno, _
                              row.cedula, _
                              "", _
                              row.direccion, _
                              row.telefono, _
                              row.email, _
                              row.fechaNacimiento, _
                              row.lugarNacimiento, _
                              row.celular, _
                              row.colegioAnterior)
    End Function

End Class
